package org.wesc.boot.common.utils;

import java.util.concurrent.ThreadLocalRandom;

/**
 * 随机工具类
 * @author Wesley
 */
public class RandomUtil {

    /** 用于随机选的数字 */
    public static final String BASE_NUMBER = "0123456789";

    /** 用于随机选的字符 */
    public static final String BASE_CHAR = "abcdefghijklmnopqrstuvwxyz";

    /** 用于随机选的字符和数字 */
    public static final String BASE_CHAR_NUMBER = BASE_CHAR + BASE_NUMBER;

    public RandomUtil() {
    }

    /**
     * 获取随机数生成器对象<br>
     * ThreadLocalRandom是JDK 7之后提供并发产生随机数，能够解决多个线程发生的竞争争夺。
     * @return 发产生随机数
     */
    public static ThreadLocalRandom getRandom() {
        return ThreadLocalRandom.current();
    }

    /**
     * 获取随机数字
     * @param length 长度
     * @return 指定长度的随机数字
     */
    public static String randomNumbers(int length) {
        return randomString(BASE_NUMBER, length);
    }

    /**
     * 获取随机字符串
     * @param baseString 基础字符
     * @param length 长度
     * @return 指定长度的随机字符串
     */
    public static String randomString(String baseString, int length) {
        StringBuilder sb = new StringBuilder();
        if (length < 1) {
            length = 1;
        }

        int baseLength = baseString.length();

        for(int i = 0; i < length; ++i) {
            int number = getRandom().nextInt(baseLength);
            sb.append(baseString.charAt(number));
        }

        return sb.toString();
    }
}
